<?php

namespace app\utils;

/**
 * 坐标工具
 * Class CoordinateUtil
 * @package utils
 */
class CoordinateUtil{
    /**
     * 单位
     * 1:米,2:公里
     */
    const METER = 1;
    const KILOMETER = 2;
    /**
     * 计算两点地理坐标之间的距离
     * @param double $longitude1 起点经度
     * @param double $latitude1 起点纬度
     * @param double $longitude2 终点经度
     * @param double $latitude2 终点纬度
     * @param integer   $unit    单位 1:米 2:公里
     * @param integer   $decimal  精度 保留小数位数
     * @return double
     */
    public static function distance($longitude1,$latitude1,$longitude2,$latitude2 ,$unit=self::KILOMETER, $decimal=2){

        $EARTH_RADIUS = 6370.996; // 地球半径系数
        $PI = 3.1415926;

        $radLat1 = $latitude1 * $PI / 180.0;
        $radLat2 = $latitude2 * $PI / 180.0;

        $radLng1 = $longitude1 * $PI / 180.0;
        $radLng2 = $longitude2 * $PI /180.0;

        $a = $radLat1 - $radLat2;
        $b = $radLng1 - $radLng2;

        $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
        $distance = $distance * $EARTH_RADIUS * 1000;

        if($unit==2){
            $distance = $distance / 1000;
        }

        return round($distance, $decimal);
    }

    /**
     * 检测坐标格式
     * @param $value
     * @return bool
     */
    public static function checkFormat($value){
        if(strpos($value,",") === false){
            return false;
        }
        $lng_lat = explode(",",$value);
        if(count($lng_lat) > 2){
            return false;
        }
        if(!is_numeric($lng_lat[0]) || !is_numeric($lng_lat[1])){
            return false;
        }
        return true;
    }
}
